namespace NFreeMarker.Template
{
    public static class ObjectWrapper
    {
        /**
         * An ObjectWrapper that works similarly to {@link #SIMPLE_WRAPPER}, but
         * exposes the objects methods and JavaBeans properties as hash elements
         * and custom handling for Java Maps, ResourceBundles, etc.
         */
        internal static IObjectWrapper BeansWrapper = Ext.Beans.BeansWrapper.GetDefaultInstance();

        /// <summary>
        /// The default object wrapper implementation.
        /// Wraps Maps as SimpleHash and Lists as SimpleSequences, Strings and 
        /// Numbers as SimpleScalar and SimpleNumber respectively.
        /// Other objects are beans-wrapped, thus exposing reflection-based information.
        /// </summary>
        internal static IObjectWrapper DefaultWrapper = DefaultObjectWrapper.Instance;

        /**
         * object wrapper that uses SimpleXXX wrappers only.
         * This wrapper has far more restrictive semantics. It 
         * behaves like the DEFAULT_WRAPPER, but for objects
         * that it does not know how to wrap as a SimpleXXX, it 
         * throws an exception. It makes no use of reflection-based 
         * exposure of methods. 
         */
        internal static IObjectWrapper SimpleWrapper = SimpleObjectWrapper.Instance;
    }
}